Dart eval:DeclarationOrBridge 实体类
介绍
表示一个声明,它是一个标准的 Dart 声明,或者是 dart_eval 桥接声明。可以看出,该类对 Dart 的声明进行了扩展,加入了桥接 Dart 的能力。也就是说,对于 Dart 中的声明,通过 BridgeDeclaration,可以导入到 dart_eval 中,在 dart_eval 使用时,最终会操作 Dart 中的声明。
类实现
实现源码如下:
class DeclarationOrBridge<T extends Declaration, R extends BridgeDeclaration> {
DeclarationOrBridge(this.sourceLib, {this.declaration, this.bridge})
: assert(declaration != null || bridge != null);
int sourceLib;
T? declaration; // Dart 声明
R? bridge; // 桥接声明,二选一
bool get isBridge => bridge != null;
}
其中:sourceLib 是什么呢?许多地方直接传入了 -1。
使用场景
在《Dart eval:Compiler 类》的 compileSources 方法中,实现了将桥接类从 BridgeDeclaration 包装为 DeclarationOrBridge 的过程。具体代码如下:
for (final bridgeLibrary in _bridgeDeclarations.keys) {
final bridgeLibDeclarations = [
for (final bridgeDeclaration in _bridgeDeclarations[bridgeLibrary]!)
DeclarationOrBridge(-1, bridge: bridgeDeclaration)
];
其中:sourceLib 直接传入了 -1。